import { CleanupService } from './cleanupService';

/**
 * 定时器管理服务
 * 管理各种定时任务，包括客户自动清理定时器
 */
export class TimerService {
  private static cleanupTimerInterval: NodeJS.Timeout | null = null;
  private static isCleanupTimerRunning = false;

  /**
   * 启动客户自动清理定时器
   */
  static startCleanupTimer(): void {
    if (this.isCleanupTimerRunning) {
      console.log('客户自动清理定时器已经在运行中');
      return;
    }

    console.log('启动客户自动清理定时器，每5分钟执行一次');
    
    // 立即执行一次清理
    CleanupService.cleanupUnmanagedClients().catch(error => {
      console.error('首次客户清理任务执行失败:', error);
    });
    
    // 设置定时器，每5分钟（300000毫秒）执行一次
    this.cleanupTimerInterval = setInterval(async () => {
      try {
        await CleanupService.cleanupUnmanagedClients();
      } catch (error) {
        console.error('定时客户清理任务执行失败:', error);
      }
    }, 5 * 60 * 1000);

    this.isCleanupTimerRunning = true;
    console.log('客户自动清理定时器启动成功');
  }

  /**
   * 停止客户自动清理定时器
   */
  static stopCleanupTimer(): void {
    if (this.cleanupTimerInterval) {
      clearInterval(this.cleanupTimerInterval);
      this.cleanupTimerInterval = null;
    }
    this.isCleanupTimerRunning = false;
    console.log('客户自动清理定时器已停止');
  }

  /**
   * 立即执行一次客户清理（删除客户经理时调用）
   */
  static async triggerImmediateCleanup(): Promise<void> {
    console.log('触发立即客户清理检查...');
    try {
      await CleanupService.cleanupUnmanagedClients();
    } catch (error) {
      console.error('立即客户清理任务执行失败:', error);
    }
  }

  /**
   * 获取定时器状态
   */
  static getTimerStatus(): {
    cleanupTimerRunning: boolean;
  } {
    return {
      cleanupTimerRunning: this.isCleanupTimerRunning
    };
  }

  /**
   * 重启客户清理定时器
   */
  static restartCleanupTimer(): void {
    console.log('重启客户自动清理定时器...');
    this.stopCleanupTimer();
    setTimeout(() => {
      this.startCleanupTimer();
    }, 1000); // 延迟1秒重启，确保清理完成
  }

  /**
   * 启动所有定时器（服务器启动时调用）
   */
  static startAllTimers(): void {
    console.log('启动所有定时器...');
    this.startCleanupTimer();
    // 未来可以在这里添加其他定时器
  }

  /**
   * 停止所有定时器（服务器关闭时调用）
   */
  static stopAllTimers(): void {
    console.log('停止所有定时器...');
    this.stopCleanupTimer();
    // 未来可以在这里停止其他定时器
  }
}